#ifndef APPINITIALIZER_H
#define APPINITIALIZER_H

#include <QObject>
#include <memory>
#include "database.h"
#include "databaseconfig.h"

class AppInitializer : public QObject
{
    Q_OBJECT

public:
    // 静态方法：执行全局初始化（程序启动时调用一次）
    static bool initialize();

    // 静态方法：全局获取数据库连接（所有页面直接调用）
    static Database* database();

    // 静态方法：全局获取错误信息
    static QString error();

private:
    // 私有构造函数：防止外部创建实例
    explicit AppInitializer(QObject *parent = nullptr);

    // 禁用拷贝构造和移动构造（Qt 5.12 兼容写法）
    AppInitializer(const AppInitializer&) = delete;
    AppInitializer(AppInitializer&&) = delete;
    AppInitializer& operator=(const AppInitializer&) = delete;
    AppInitializer& operator=(AppInitializer&&) = delete;

    // 静态成员变量：全局唯一的数据库实例、配置、错误信息
    static std::unique_ptr<Database> m_db;
    static DatabaseConfig m_config;
    static QString m_lastError;
};

#endif // APPINITIALIZER_H
